倒數第二天回頭稍微看看另一個有實作 device activity 的專案 (by Tarık Ayberk Yılıkoğlu)。
在第一次進入 app 的時候,這個專案一樣使用了 AuthorizationCenter.shared.requestAuthorization
去請求授權,而專案也在最外層的 Screen_TimeApp
和 MonitorExtension
中都標示了 @Main
。
中間關於幾個 struct 的交互看起來有點小複雜,首先 MonitorExtension
是 DeviceActivityReportExtension
,這可以顯示自定義的使用時間報告,不過裡面需要實現 DeviceActivityReportScene
。而當接收到 totalActivity
時,會把它傳遞給 TotalActivityReport
。
TotalActivityReport
裡面的 content
是 closure,接收一個 ActivityReport
為參數,然後返回 TotalActivityView
。而 TotalActivityView
在拿到 ActivityReport
之後,其實做的事情很簡單,只是單純的拿取裡面的的資料並用特定的 UI 格式去渲染出來而已。
TotalActivityReport
裡面還有一個重要的 function:makeConfiguration
,被用來生成需要的 ActivityReport
數據。這個函示會接收 DeviceActivityResults<DeviceActivityData>
做為參數,然後對裡面的內容經過處理後再傳遞下去。
最後,翻的時候意外在這個 repo 的 issue 中看到有人留言說 simulator 上跑不出資料,而作者回應說模擬器上面本來就無法正常顯示,要跑在實體機上才會收到結果,這樣好像得想個辦法把 iphone 和 mac 串起來啊。